home *** CD-ROM | disk | FTP | other *** search
- program printdoc;
- {----------------------------------------------------------}
- {- -}
- {- This is a quick adhoc program to print out the -}
- {- documentation for the video routines. -}
- {- -}
- {----------------------------------------------------------}
- Const
- LineLength = 55;
-
- Type
- Str255 = String[255];
- Str2 = String[2];
- Str70 = String[70];
- TCSet = Set of 0..255;
-
- Var
- Lines : Array[1..66] Of Str70;
- Head : Array[1..5] Of Str70;
- Foot : Array[48..66] Of Str70;
- FilVar : Text;
-
- Done,
- PgSet : Boolean;
-
- i,
- PageNo : Integer;
- TC : Str2;
-
- Procedure WriteSt(St : Str255); External 'V24.ENH';
- Procedure WaitMsg( X,Y : Integer;
- St : Str255;
- TESet : TCSet;
- Var TC : Str2); External 'V21.ENH';
-
- Procedure SetPageNo(Var Line : Str70);
- Var
- St : String[70];
- Code : Integer;
- Begin
- Move(Line[7],St[1],2);
- St[0] := Chr(2);
- Val(St,PageNo,Code);
- FillChar(Line[1],70,32);
- Line[0] := Chr(0);
- End;
-
- Procedure SetHead(Var Line : Str70);
- Var
- St : Str70;
- LineNo,
- Code : Integer;
- Begin
- Move(Line[7],St[1],2);
- St[0] := Chr(2);
- Val(St,LineNo,Code);
- FillChar(Head[LineNo][1],70,32);
- Head[LineNo] := '';
- Head[LineNo] := Line;
- FillChar(Line[i],70,32);
- Line := '';
- Delete(Head[LineNo],1,8);
- End;
-
- Procedure SetFoot(Var Line : Str70);
- Var
- St : Str70;
- LineNo,
- Code : Integer;
- Begin
- Move(Line[7],St[1],2);
- St[0] := Chr(2);
- Val(St,LineNo,Code);
- FillChar(Foot[LineNo][1],70,32);
- Foot[LineNo] := '';
- Foot[LineNo] := Line;
- FillChar(Line[i],70,32);
- Line := '';
- Delete(Foot[LineNo],1,8);
- End;
-
- Procedure ReadPage;
- Var
- i : Integer;
- pn : String[2];
- St : String[70];
- Begin
- For i := 1 to 66 Do Begin
- FillChar(Lines[i][1],70,32);
- Lines[i][0] := Chr(0);
- End;
- PageNo := PageNo + 1;
- i := 6;
- While (i <= 47) And (Not Done) Do Begin
- If Eof(FilVar) Then
- Done := True
- Else Begin
- Readln(FilVar,Lines[i]);
- Move(Lines[i][1],St[1],6);
- St[0] := Chr(6);
- If St = '..pgno' Then
- SetPageNo(Lines[i])
- Else If St = '..head' Then
- SetHead(Lines[i])
- Else If St = '..foot' Then
- SetFoot(Lines[i])
- Else If St = '..page' Then Begin
- FillChar(Lines[i][1],70,32);
- Lines[i] := '';
- i := 48;
- End
- Else
- i := i + 1;
- End
- End;
- End;
-
- Procedure RightJustify(Var St : Str70);
- Begin
- Move(St[1],St[LineLength+1-Length(St)],Length(St));
- FillChar(St[1],LineLength-Length(St),32);
- St[0] := Chr(LineLength);
- End;
-
- Procedure Center(Var St : Str70);
- Var
- i : Integer;
- Begin
- i := (LineLength Div 2) - (Length(St) Div 2) + 1;
- Move(St[1],St[i],Length(St));
- FillChar(St[1],i-1,32);
- St[0] := Chr(i+Length(St)-1);
- End;
-
- Procedure AdjustHeaders;
- Var
- St,St1: Str70;
- i,j,k : Integer;
- Begin
- For i := 1 To 5 Do
- If Head[i] = '' Then
- Lines[i] := ''
- Else Begin
- St := Head[i][1];
- St1 := Head[i];
- Delete(St1,1,1);
- If UpCase(St[1]) = 'R' Then
- RightJustify(St1)
- Else If UpCase(St[1]) = 'C' Then
- Center(St1)
- Else If UpCase(St[1]) = 'A' Then
- If Odd(PageNo) Then
- RightJustify(St1);
- Lines[i] := St1;
- End;
- End;
-
- Procedure AdjustFooters;
- Var
- St,St1: Str70;
- i,j,k : Integer;
- Begin
- For i := 48 To 66 Do
- If Foot[i] = '' Then
- Lines[i] := ''
- Else Begin
- St := Foot[i][1];
- St1 := Foot[i];
- Delete(St1,1,1);
- If UpCase(St[1]) = 'R' Then
- RightJustify(St1)
- Else If UpCase(St[1]) = 'C' Then
- Center(St1)
- Else If UpCase(St[1]) = 'A' Then
- If Odd(PageNo) Then
- RightJustify(St1);
- Lines[i] := St1;
- End;
- End;
-
- Procedure DoPageNumber;
- Var
- i,j,c : Integer;
- St : Str70;
- pgno : String[2];
- Begin
- For i := 1 To 66 Do Begin
- j := Pos('##',Lines[i]);
- FillChar(St[0],3,0);
- If j > 0 Then Begin
- Str(PageNo:1,St);
- Move(St[1],Lines[i][j],Length(St));
- If Length(St) = 1 Then Begin
- Delete(Lines[i],j+1,1);
- Insert(' ',Lines[i],1);
- End;
- End;
- End;
- End;
-
- Procedure PrintPage;
- Var
- i : Integer;
- ch : Char;
- Begin
- AdjustHeaders;
- AdjustFooters;
- DoPageNumber;
- For i := 1 to 66 do
- Writeln(lst,' ',Lines[i]);
- End;
-
- Begin
- PageNo := 0;
- For i := 1 to 5 Do Begin
- FillChar(Head[i][1],70,32);
- Head[i][0] := Chr(0);
- End;
- For i := 48 to 66 Do Begin
- FillChar(Foot[i][1],70,32);
- Foot[i][0] := Chr(0);
- End;
- ClrScr;
- Gotoxy(10,10);
- WriteSt('Make sure your printer is on and ready to print');
- Gotoxy(10,36);
- WaitMsg(10,11,'Press [ENTER] when ready',[13],TC);
- Assign(FilVar,'VIDEO.DOC');
- Reset(FilVar);
- Done := False;
- While Not Done Do Begin
- ReadPage;
- PrintPage;
- End;
- Close(FilVar);
- End.
-